set(CPP17_SOURCES
    structured_bindings.cpp
    if_constexpr.cpp
    inline_variables.cpp
    fold_expressions.cpp
    filesystem.cpp
    optional.cpp
    variant.cpp
    any.cpp
    string_view.cpp
    invoke.cpp
    if_switch_init.cpp
    byte.cpp
    apply.cpp
    parallel_algorithms.cpp
    features.cpp
)

# 创建库（供其他项目使用）
add_library(cpp17_features_lib ${CPP17_SOURCES})
target_compile_features(cpp17_features_lib PUBLIC cxx_std_17)

# 链接filesystem库（某些GCC版本需要）
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
    target_link_libraries(cpp17_features_lib PUBLIC stdc++fs)
  endif()
endif()

# 并行算法支持
# GCC 9+内置支持并行算法，不需要额外链接库
# 但如果遇到链接错误，可能需要安装TBB库
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  # 检查execution头文件是否可用
  include(CheckIncludeFileCXX)
  check_include_file_cxx("execution" HAVE_EXECUTION)
  if(NOT HAVE_EXECUTION)
    message(WARNING "未找到<execution>头文件，并行算法可能不可用")
  endif()
endif()

# 创建可执行文件
add_executable(cpp17_features main.cpp)
target_compile_features(cpp17_features PUBLIC cxx_std_17)
target_link_libraries(cpp17_features cpp17_features_lib)

# 链接filesystem库（可执行文件也需要）
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
  if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "9.0")
    target_link_libraries(cpp17_features PUBLIC stdc++fs)
  endif()
endif()

# 为了向后兼容，创建别名
add_library(cpp17_features ALIAS cpp17_features_lib) 